package basic.courseLearn01.utils;

import java.util.Arrays;


public class SortUtils {
    //交换result数组的下标a和b的值
    public static int[] swap(int[] result,int a,int b){
        int temp=result[a];
        result[a]=result[b];
        result[b]=temp;
        return result;
    }

    //作为对数器的对比选项，用于作为对照
    public static int[] rightSort(int[] result){
        Arrays.sort(result);
        return result;
    }

    /**
     * 生成随机数组
     * @param size      数组大小
     * @param limit     最大值,[-limit,limit]
     * @return
     */
    public static int[] generateArrays(int size,int limit){
        int[] res =new int[size];
        for (int i = 0; i < size; i++) {
            int res1 = (int)(Math.random()*limit)+1;  //[0,limit],int
            int res2 = (int)(Math.random()*limit)+1;  //[0,limit],int
            res[i]=res1-res2;
        }
        return res;
    }

    /**
     * 核实两个数组是否一致
     * @param res1  数组1
     * @param res2  数组2
     * @return  true/false
     */
    public static boolean checkArrays(int[] res1,int[] res2){

        String  res_a =Arrays.toString(res1);
        String  res_b =Arrays.toString(res2);
        if (res_a.equals(res_b)){
            return true;
        }else {
            return false;
        }
    }

    /**
     * 对数器的比对操作
     * @param loopNum  循环次数
     * @param size   数组长度
     * @param limit     数组中数的限制[-limit,limit]
     * @param functionSort     传入排序方法(实现了排序方法的接口类)
     */
    public static void executeCheckAlgorithm(int loopNum,int size,int limit,FunctionSort functionSort){
        boolean right =true;
        int[] result_a,result_b;
        for (int i = 0; i < loopNum; i++) {
//        1.生成数组result_a
            result_a=SortUtils.generateArrays(size,limit);

//        2.对数组a使用方式1排序
            result_b= SortUtils.rightSort(result_a);

//        3.对数组a使用方式2排序
            result_a=functionSort.sort(result_a);

//        4.核实比对两数组
            if (!SortUtils.checkArrays(result_a,result_b)){
                System.out.println("oh my god");
                right=false;
                break;
            }
        }
        if (right){
            System.out.println("very good");
        }
    }




}
